<html>
    <head>
        <title>对实体进行扩展</title>
    </head>
    <body>
        <script>
            /*
                 1、对实体进行扩展

                                        打开解决方案的Domain.Shared项目中的YourProjectNameModuleExtensionConfigurator类，并更改ConfigureExtraProperties方法，

                                        如下所示，将SocialSecurityNumber属性添加到Identity Module的IdentityUser实体。


                                                    public static void ConfigureExtraProperties()
                                                    {
                                                        OneTimeRunner.Run(() =>
                                                        {
                                                            ObjectExtensionManager.Instance.Modules()
                                                                .ConfigureIdentity(identity =>
                                                                {
                                                                    identity.ConfigureUser(user =>
                                                                    {
                                                                        user.AddOrUpdateProperty<string>( //property type: string
                                                                            "SocialSecurityNumber", //属性名
                                                                            property =>
                                                                            {
                                                                                // 验证规则
                                                                                property.Attributes.Add(new RequiredAttribute());
                                                                                property.Attributes.Add(
                                                                                    new StringLengthAttribute(64) {
                                                                                        MinimumLength = 4
                                                                                    }
                                                                                );

                                                                                //...other configurations for this property
                                                                            }
                                                                        );
                                                                    });
                                                                });
                                                        });
                                                    }

                                                    ObjectExtensionManager.Instance.Modules()是配置模块的起点。
                                                    
                                                    ConfigureIdentity(...)方法用于配置身份模块的实体。

                                                    identity.ConfigureUser(...)用于配置标识模块的用户实体。
                                                    
                                                    并非所有实体都设计为可扩展的（因为不需要）。使用智能感知来发现可扩展的模块和实体。

                                                    user.AddOrUpdateProperty<string>(...)用于为string类型的用户实体添加新属性
                                                （AddOrUpdateProperty方法可以针对同一实体的同一属性多次调用，每次调用可以配置同一属性的选项，但同一属性名的实体只添加一个属性）


                                                    SocialSecurityNumber是新属性的名称。

                                                    AddOrUpdateProperty获取第二个参数（property =>lambda表达式）来为新属性配置其他选项。

                                                            我们可以添加如下所示的数据注释属性，就像将数据注释属性添加到类属性一样。

            */
        </script>
    </body>
</html>